/*
  Programa GEFE - Gestión de eventos lúdicos.
  Copyright (C) 2010  Antonio Ramírez Marti

  This program is free software: you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation, either version 3 of the License, or
  (at your option) any later version.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#include "cambiohabitaciondialog.h"
#include "ui_cambiohabitaciondialog.h"

cambioHabitacionDialog::cambioHabitacionDialog(QWidget *parent,QVariant grupo) :
    QDialog(parent), ui(new Ui::cambioHabitacionDialog)
{
    ui->setupUi(this);
    this->IDgrupo=grupo;
    setup();
}

cambioHabitacionDialog::~cambioHabitacionDialog()
{
    destruyeModelo();
    delete ui;
}

void cambioHabitacionDialog::changeEvent(QEvent *e)
{
    QDialog::changeEvent(e);
    switch (e->type()) {
    case QEvent::LanguageChange:
        ui->retranslateUi(this);
        break;
    default:
        break;
    }
}

void cambioHabitacionDialog::setup()
{
    modelo=0;
    creaModelo();
    conectaModelo();

    //Conecta la señal de accepted con el slot correspondiente
    connect(ui->buttonBox,SIGNAL(accepted()),this,SLOT(cambiarGrupo()));
}


void cambioHabitacionDialog::creaModelo()
{
    if(!modelo)
        modelo=new QSqlQueryModel(this);

    modelo->setQuery("SELECT * FROM habitacion",QSqlDatabase::database("evento"));
}

void cambioHabitacionDialog::conectaModelo()
{
    ui->vistaHabitaciones->setModel(modelo);

    ui->vistaHabitaciones->setColumnHidden(ModeloHabitaciones::Reservada,true);
    ui->vistaHabitaciones->setColumnHidden(ModeloHabitaciones::Ocupada,true);
    ui->vistaHabitaciones->setColumnHidden(ModeloHabitaciones::Asignada,true);
    ui->vistaHabitaciones->setColumnHidden(ModeloHabitaciones::Localizacion,true);
}

void cambioHabitacionDialog::destruyeModelo()
{
    if(modelo)
    {
        delete modelo;
        modelo=0;
    }
}

void cambioHabitacionDialog::cambiarGrupo()
{
    //Obtener codigo de la nueva habitacion

    QVariant codigo;

    codigo=modelo->data(modelo->index(ui->vistaHabitaciones->selectionModel()->currentIndex().row(),ModeloHabitaciones::CodigoHab),Qt::EditRole);
    {
        QSqlQuery query(QSqlDatabase::database("evento"));

        query.prepare("SELECT count(*) FROM asignado_a WHERE IDgrupo=:grupo");
        query.bindValue(":grupo",IDgrupo);

        query.exec();

        query.first();

        if(query.value(0).toInt())      //Existe una entrada en la tabla de asignacion, cambiarla
        {
            query.clear();
            query.prepare("UPDATE asignado_a SET codHab=:nuevaHabitacion WHERE IDgrupo=:grupo");

        }
        else        //No hay entrada en la tabla de asignacion, hay que introducirlo
        {
            query.clear();
            query.prepare("INSERT INTO asignado_a(IDgrupo,codHab) VALUES(:grupo,:nuevaHabitacion)");
        }
        query.bindValue(":nuevaHabitacion",codigo);
        query.bindValue(":grupo",IDgrupo);

        query.exec();
    }
    emit this->cambioHabitacion();
}
